package com.company.class6;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;

/**
 * @Classname MapTest
 * @Description 类型说明
 * @Date 2022/4/24 20:41
 * @Created by zbw
 */

public class MapTest {
    public static void main(String[] args) {
        //创建
        Map<String,Integer> map =new HashMap<>();
        //增删改查
        //增
        map.put("roy",32);
        map.put("will",32);
        map.put("zbw",25);
        System.out.println(map);
        //因为map的key是用set进行存储的，所以不允许出现重复的键
        //如果put的时候，用了不同的值，那么会修改键对应的值
        map.put("roy",34);
        System.out.println("put一个重复的键等价于做了修改："+map);

        //删
//        map.remove("will");
        //正常用例：移除键和值对应
        map.remove("will",32);
        //异常用例：
        //移除键值对不对应的数据：不报错，不影响
//        map.remove("will",44);
        //移除不存在的键：不报错，不影响
//        map.remove("Will");
        System.out.println("删除一个键："+map);

        //改：因为map有键，所以可以根据键修改值
        map.replace("roy",35);
        map.replace("zbw",26);
        System.out.println("通过replace进行修改："+map);

        //查，获取一个键对应的值
        System.out.println(map.get("roy"));

        //遍历
        //由于没有下标，所以遍历方式只有foreach和iterator
        //1、foreach
        //map是存储键的set和Entry的set，遍历的时候借助这两个set进行遍历
        //2.1 使用键的set遍历 keyset
        System.out.println("------------------------keySet进行foreach遍历---------------");
        Set<String> keySet = map.keySet();
        for (String key: keySet){
            System.out.println(key+"的值是"+map.get(key));
        }
        //1.2 使用键值对的set遍历   entryset
        System.out.println("------------------------entrySet进行foreach遍历---------------");
        Set<Entry<String,Integer>> entries = map.entrySet();
        for (Entry<String, Integer> entry : entries) {
            System.out.println(entry.getKey()+"的值是"+entry.getValue());
        }

        //2、iterator
        //map是存储键的set和Entry的set，遍历的时候借助这两个set进行遍历
        //2.1 使用键的set遍历 keyset
        System.out.println("----------------------keySet进行Iterator遍历--------------");
        Iterator<String> it = map.keySet().iterator();
//        while (it.hasNext()){
//            //一次hasnext判断，是判断有没有下个值，不要在一次判断中多次取值。
//            System.out.println(it.next()+"值是"+map.get(it.next()));
//        }
        while (it.hasNext()){
            //只调用一次next
            String key = it.next();
            System.out.println(key+"值是"+map.get(key));
        }

        //2.2 使用键值对的set遍历  entrySet
        System.out.println("----------------------entrySet进行Iterator遍历--------------");
        Iterator<Entry<String,Integer>> entryIterator = map.entrySet().iterator();
        while (entryIterator.hasNext()){
            Entry<String, Integer> entry = entryIterator.next();
            System.out.println(entry.getKey()+"的值是"+entry.getValue());
        }

    }
}
